package pers.wensheng.patterns.structural_pattern.combination_pattern.transparent_combination_pattern.entity;

import lombok.Getter;

/**
 * 菜单组件
 * 属于抽象根节点
 */
public abstract class MenuComponent {

    @Getter
    protected String name;

    /**
     * 菜单组件的层级
     */
    protected int level;

    /**
     * 添加子菜单
     * @param menuComponent 可以是子菜单也可以是子菜单项
     */
    public void add(MenuComponent menuComponent){
        //都不支持菜单项的操作，仅可操作子菜单
        throw  new UnsupportedOperationException("不支持的操作异常，添加子菜单");
    }

    /**
     * 移除子菜单
     * @param menuComponent 可以是子菜单也可以是子菜单项
     */
    public void remove(MenuComponent menuComponent){
        //都不支持菜单项的操作，仅可操作子菜单
        throw  new UnsupportedOperationException("不支持的操作异常，移除子菜单");
    }

    /**
     * 获取指定的子菜单
     * @param index
     * @return
     */
    public MenuComponent getChild(int index){
        throw  new UnsupportedOperationException("不支持的操作异常，获取指定的子菜单");
    }

    /**
     * 打印菜单名称的方法（包含子菜单和子菜单项）
     */
    public abstract void print();
}
